package cn.zhukelili.generic;

/**
 * @description: 抽象享元角色
 * @author: hhbeast
 * @since: 2018/7/28 15:15
 */
public abstract class Flyweight {
    //内部状态
    private String intrinsic;
    //外部状态
    protected final String Extrinsic;

    //要求享元角色必须接受外部状态
    public Flyweight(String _Extrinsic) {
        this.Extrinsic = _Extrinsic;
    }

    //定义业务操作
    public abstract void operate();

    //内部状态的getter/setter
    public String getIntrinsic() {
        return intrinsic;
    }

    public void setIntrinsic(String intrinsic) {
        this.intrinsic = intrinsic;
    }
}

/*
抽象享元角色一般为抽象类，在实际项目中，一般是一个实现类，它是描述一类事物的
方法。在抽象角色中，一般需要把外部状态和内部状态（当然了，可以没有内部状态，只有
行为也是可以的）定义出来，避免子类的随意扩展。

这很简单，实现自己的业务逻辑，然后接收外部状态，以便内部业务逻辑对外部状态的
依赖。注意，我们在抽象享元中对外部状态加上了final关键字，防止意外产生，什么意外？
获得了一个外部状态，然后无意修改了一下，池就混乱了！
 */

